package com.hcss.sys.role.dao;

import com.hcss.sys.menu.model.HcSysMenu;
import com.hcss.sys.menu.model.vo.HcSysMenuVO;
import com.hcss.sys.role.model.HcSysRole;
import com.hcss.sys.role.model.HcSysRoleuser;
import com.hcss.sys.role.model.vo.HcSysRolemenuVO;
import org.apache.ibatis.annotations.Param;

import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;

public interface HcSysRoleComplexMapper {
    /**
     * 根据菜单id查询角色数据
     * @param menuid
     * @return
     */
    List<HcSysRole> selectRoleByMenuid(@NotNull String menuid);

    /**
     * 根据角色id查询菜单数据
     * @param roleid
     * @return
     */
    List<HcSysMenu> selectMenuByRoleid(@NotNull String roleid);

    /**
     * 根据角色id查询用户数据
     * @param roleid
     * @return
     */
    List<Map<String, String>> selectUserByRoleid(@NotNull String roleid);

    /**
     * 根据userid查询菜单数据
     * @param userid
     * @return
     */
    List<HcSysMenuVO> selectMenuByUserid(@NotNull String userid);

    List<HcSysMenuVO> selectMenuAllByUserid(@NotNull String userid);

    /**
     * 获取userid用户拥有菜单链接集合
     * @param userid
     * @return
     */
    List<String> selectMenuUrlByUserid(@NotNull String userid);
    /**
     * 获取userid用户拥有菜单集合
     * @param userid
     * @return
     */
    List<HcSysMenu> getMenuByUserid(@NotNull String userid);

    /**
     * 根据菜单id获取菜单所在角色绑定的用户集合
     * @param menuid
     * @return
     */
    List<HcSysRoleuser> selectUserByRoleMenu(@NotNull String menuid);

    /**
     *  根据主键删除数据库的记录
     *
     * @param id
     */
    int deleteByPrimaryKey(String id);

    /**
     *  根据指定主键获取一条数据库记录
     *
     * @param id
     */
    HcSysRole selectByPrimaryKey(String id);

    /**
     *  批量根据主键更新记录
     *
     * @param list
     */
    int updateBatchByPrimaryKeySelective(List<HcSysRole> list);

    /**
     *  动态字段,根据主键来更新符合条件的数据库记录
     *
     * @param record
     */
    int updateByPrimaryKeySelective(HcSysRole record);

    /**
     *  批量根据主键更新记录
     *
     * @param list
     */
    int updateBatchByPrimaryKey(List<HcSysRole> list);

    /**
     *  根据主键来更新符合条件的数据库记录
     *
     * @param record
     */
    int updateByPrimaryKey(HcSysRole record);

    /**
     *  批量写入数据库记录
     *
     * @param list
     */
    int insertBatch(List<HcSysRolemenuVO> list);

    /**
     *  新写入数据库记录
     *
     * @param record
     */
    int insert(HcSysRolemenuVO record);

    /**
     * 查询用户拥有角色code集合
     * @param userid
     * @return
     */
    List<String> selectUserRoleCode(@Param("userid") String userid);

    /**
     * 获取用户{userid}拥有{menuUrl}的角色信息
     * @param userid
     * @param menuUrl
     * @return
     */
    List<HcSysRoleuser> selectUserRoleByMenu(@Param("userid") String userid, @Param("menuUrl") String menuUrl);
}
